/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package logica;

import fisica.CapaFisica;
import fisica.InterconsultaFisica;
import hibernate.objeto.DiagnosticoYTriageInternacion;
import hibernate.objeto.EnfermedadYDiagnosticoAmbulatorio;
import hibernate.objeto.Interconsulta;
import java.util.Date;
import java.util.Vector;
import presentacion.CapaPresentacion;

/**
 *
 * @author Gonzalo
 */
public class InterconsultaLogica extends CapaLogica {

    /**
     * Crea y persiste la interconsulta para una enfermedad del paciente.
     *
     * @param datosInterconsultaAmbulatorio Los datos a cargar
     * @param enfermedadYDiagnosticoAmbulatorioLogica La enfermedad y su
     * diagnóstico
     * @param diagnosticoYTriageInternacion  El diagnostico y triage y su
     * diagnóstico
     * @param idObjetoCreado El id del objeto creado para su posterior recuperación
     * @return true si se agregó correctamente, false en caso contrario
     */
    public static boolean agregarInterconsulta(
            Object[] datosInterconsultaAmbulatorio,
            EnfermedadYDiagnosticoAmbulatorio
            enfermedadYDiagnosticoAmbulatorio, 
            DiagnosticoYTriageInternacion 
            diagnosticoYTriageInternacion, 
            int[] idObjetoCreado) {

        Interconsulta interconsulta;

        if (enfermedadYDiagnosticoAmbulatorio != null) {
            interconsulta =
                    crearObjetoInterconsulta(
                    datosInterconsultaAmbulatorio,
                    enfermedadYDiagnosticoAmbulatorio, null);
        } else {
            interconsulta =
                    crearObjetoInterconsulta(
                    datosInterconsultaAmbulatorio,
                    null,
                    diagnosticoYTriageInternacion);
        }

        //Persiste el objeto
        if (CapaFisica.guardarOActualizarObjeto(
                interconsulta)) {
            idObjetoCreado[0] =
                    interconsulta.getIdInterconsulta();
            return true;
        } else {
            return false;
        }
    }

    /**
     * Crea un objeto Interconsulta con los datos pasados por
     * parámetro.
     *
     * @param datosEnfermedadYDiagnosticoAmbulatorio Los datos a cargar
     * @param enfermedadYDiagnosticoAmbulatorioLogica La enfermedad y su
     * diagnóstico
     * @param diagnosticoYTriageInternacion  El diagnostico y triage y su
     * diagnóstico
     * @return El objeto Interconsulta creado
     */
    private static Interconsulta crearObjetoInterconsulta(
            Object[] datosEnfermedadYDiagnosticoAmbulatorio,
            EnfermedadYDiagnosticoAmbulatorio enfermedadYDiagnosticoAmbulatorio,
            DiagnosticoYTriageInternacion diagnosticoYTriageInternacion) {

        Interconsulta interconsulta = new Interconsulta();

        interconsulta.setHoraInterconsulta(
                (String) datosEnfermedadYDiagnosticoAmbulatorio[
                CapaLogica.INTERCONSULTA_HORA]);

        interconsulta.setFechaInterconsulta(
                (Date) datosEnfermedadYDiagnosticoAmbulatorio[
                CapaLogica.INTERCONSULTA_FECHA]);

        interconsulta.setDiagnosticoInterconsulta(
                (String) datosEnfermedadYDiagnosticoAmbulatorio[CapaLogica.
                INTERCONSULTA_DIAGNOSTICO]);

        interconsulta.setInformacionComplementariaInterconsulta(
                (String) datosEnfermedadYDiagnosticoAmbulatorio[CapaLogica.
                INTERCONSULTA_INFORMACION_COMPLEMENTARIA_DIAGNOSTICO]);

        interconsulta.setNombreProfesionalInterconsulta(
                (String) datosEnfermedadYDiagnosticoAmbulatorio[
                CapaLogica.INTERCONSULTA_NOMBRE_PROFESIONAL]);

        interconsulta.setApellidoProfesionalInterconsulta(
                (String) datosEnfermedadYDiagnosticoAmbulatorio[
                CapaLogica.
                INTERCONSULTA_APELLIDO_PROFESIONAL]);

        interconsulta.setEspecialidadInterconsulta(
                (String) datosEnfermedadYDiagnosticoAmbulatorio[
                CapaLogica.
                INTERCONSULTA_ESPECIALIDAD_PROFESIONAL]);

        if (enfermedadYDiagnosticoAmbulatorio != null) {
            interconsulta.setEnfermedadYDiagnosticoAmbulatorio(
                enfermedadYDiagnosticoAmbulatorio);
        } else {
            interconsulta.setDiagnosticoYTriageInternacion(
                    diagnosticoYTriageInternacion);
        }

        return interconsulta;
    }

    /**
     * Retorna el objeto Interconsulta según el id.
     *
     * @param idInterconsulta  El id de la interconsulta
     * @return El objeto Interconsulta consultado, null si no existe
     */
    public static Interconsulta getInterconsultaPorId(int idInterconsulta) {
        return InterconsultaFisica.getInterconsultaPorId(
                idInterconsulta);
    }

    /**
     * Retorna ls interconsultas cargadas de la enfermedad y
     * diagnostico consultado.
     *
     * @param idEnfermedadYDiagnosticoAmbulatorio El id de la enfermedad con 
     * su respectivo diagnostico consultado
     * @return El vector Interconsulta más reciente
     */
    public static Vector<Interconsulta>
            getVectorInterconsultaPorIdEnfermedadYDiagnosticoAmbulatorio(
            int idEnfermedadYDiagnosticoAmbulatorio) {
        Vector<Interconsulta> interconsulta =
                InterconsultaFisica.
                getVectorInterconsultaEnfermedadYDiagnosticoAmbulatorio(
                idEnfermedadYDiagnosticoAmbulatorio);

        return interconsulta;
    }

    /**
     * Retorna ls interconsultas cargadas de un paciente en la atención de
     * ambulatorio y de internación.
     *
     * @param idPaciente  El id del paciente en cuestión
     * @return El objeto Interconsulta consultado, null si no existe
     */
    public static Vector<Interconsulta> getVectorInterconsultaPorIdPaciente(
            int idPaciente) {
        Vector<Interconsulta> interconsultaPorPacienteAmbulatorio =
                InterconsultaFisica.
                getVectorInterconsultaAmbulatorioPorIdPaciente(
                idPaciente);
        Vector<Interconsulta> interconsultaPorPacienteInternacion =
                InterconsultaFisica.
                getVectorInterconsultaInternacionPorIdPaciente(
                idPaciente);

        return unirVectores(interconsultaPorPacienteAmbulatorio,
                interconsultaPorPacienteInternacion);
    }

    /**
     * Retorna ls interconsultas cargadas de la internación y
     * diagnostico consultado.
     *
     * @param idDiagnosticoYTriageInternacion La enfermedad con su respectivo
     * diagnostico consultado
     * @return El vector Interconsulta de la internacion
     */
    public static Vector<Interconsulta>
            getVectorInterconsultaPorIdDiagnosticoYTriageInternacion(
            int idDiagnosticoYTriageInternacion) {
        Vector<Interconsulta> interconsulta =
                InterconsultaFisica.
                getVectorInterconsultaPorIdDiagnosticoYTriageInternacion(
                idDiagnosticoYTriageInternacion);

        return interconsulta;
    }
    
    /**
     * Dada una interconsulta verifica si la enfermedad o internación asociada 
     * es activa.
     *
     * @param enfermedadYDiagnosticoAmbulatorio La enfermedad
     * @param diagnosticoYTriageInternacion La internacion
     * @return true si es activa, false si es no activa
     */
    public static boolean esInterconsultaActiva(
            EnfermedadYDiagnosticoAmbulatorio enfermedadYDiagnosticoAmbulatorio,
            DiagnosticoYTriageInternacion diagnosticoYTriageInternacion) {
        if (enfermedadYDiagnosticoAmbulatorio != null) {
            return ((enfermedadYDiagnosticoAmbulatorio.
                    getEstadoEnfermedadYDiagnosticoAmbulatorio().
                    equalsIgnoreCase("Activa")));
            
        } else if (diagnosticoYTriageInternacion != null) {
            return ((diagnosticoYTriageInternacion.
                    getEstadoDiagnosticoYTriageInternacion().
                    equalsIgnoreCase("Activa")));
            
        } else {
            return true;
        }
    }

    /**
     * Retorna todo el objeto Interconsulta en string.
     *
     * @param evolucion El objeto a escribir
     */
    public static String getInterconsultaString(Interconsulta interconsulta) {
        String interconsultaString =
                "idInterconsulta : " +
                interconsulta.getIdInterconsulta() + "\n" +
                "horaInterconsulta : " +
                interconsulta.getHoraInterconsulta() + "\n" +
                "fechainterconsulta : " +
                interconsulta.getFechaInterconsulta() + "\n" +
                "apellidoProfesionalInterconsulta : " +
                interconsulta.getApellidoProfesionalInterconsulta() + "\n" +
                "nombreProfesionalInterconsulta : " +
                interconsulta.getNombreProfesionalInterconsulta() + "\n" +
                "especialidadInterconsulta : " +
                interconsulta.getEspecialidadInterconsulta() + "\n" +
                "informacionComplementariaInterconsulta : " +
                interconsulta.getInformacionComplementariaInterconsulta() + "\n" +
                "diagnosticoInterconsulta : " +
                interconsulta.getDiagnosticoInterconsulta() + "\n";
                
        return interconsultaString;
    }

    /**
     * Retorna el texto HTML correspondiente a la descripcion de la interconsulta ya
     * sea ambulatorio o internación.
     *
     * @param interconsulta La interconsulta correspondiente a la práctica ambulatoria
     * o de internación
     * @return El String que contiene el HTML
     */
    public static String getInterconsultaHTML(
            Interconsulta interconsulta) {

        String interconsultaHTML = "";

        if (interconsulta != null) {
            interconsultaHTML = "<font size=\"3\" face=\"arial\" color=\"blue\">INTERCONSULTA</font><br><br> "
                            + "<hr /><font size=\"3\" face=\"arial\" color=\"blue\">Fecha: </font>"
                            + "<font size=\"3\" face=\"arial\">" +
                            CapaPresentacion.imprimirFecha(interconsulta.getFechaInterconsulta())  + " - " +
                            interconsulta.getHoraInterconsulta() + "</font><br><hr /><br>"
                            + "<font size=\"3\" face=\"arial\" color=\"blue\">Evolucionó: </font><br>"
                            + "<font size=\"3\" face=\"arial\">" +
                            interconsulta.getApellidoProfesionalInterconsulta() + ", " + interconsulta.getNombreProfesionalInterconsulta() + "</font><br><br>"
                            + "<font size=\"3\" face=\"arial\" color=\"blue\">Diagnóstico: </font><br>"
                            + "<font size=\"3\" face=\"arial\">" +
                            interconsulta.getDiagnosticoInterconsulta() + "</font><br><br>"
                            + "<font size=\"3\" face=\"arial\" color=\"blue\">Información complementaria: </font><br>"
                            + "<font size=\"3\" face=\"arial\">" +
                            interconsulta.getInformacionComplementariaInterconsulta() + "</font><br><br>"
                            + "<font size=\"3\" face=\"arial\" color=\"blue\">Especialidad: </font><br>"
                            + "<font size=\"3\" face=\"arial\">" +
                            interconsulta.getEspecialidadInterconsulta() + "</font><br><br>";
        } else {
            interconsultaHTML = "<font size=\"3\" face=\"arial\" color=\"blue\">INTERCONSULTA</font><br><br> " +
                    "<hr /><font size=\"3\" face=\"arial\">No posee</font><br></font><hr />";
        }
        return interconsultaHTML;
    }
}
